//
// Description: 888. 求组合数 IV
// Created by Loading on 2022/5/27.
//

#include <bits/stdc++.h>

using namespace std;

constexpr int N = 5010;

// 质数表，个数
int primes[N], cnt;
bool st[N];
// 质因子的次数
int sum[N];

// 线性筛质数
void get_primes(int n) {
    for (int i = 2; i <= n; ++i) {
        if (!st[i]) {
            primes[cnt++] = i;
        }
        for (int j = 0; primes[j] <= n / i; ++j) {
            st[primes[j] * i] = true;
            if (i % primes[j] == 0) {
                break;
            }
        }
    }
}

// 得到 n 中质因子 p 中的指数
int get(int n, int p) {
    int res = 0;
    while (n) {
        res += n / p;
        n /= p;
    }

    return res;
}

// 高精度乘法
vector<int> mul(vector<int> &A, int b) {
    vector<int> res;

    int t = 0;
    for (int i = 0; i < A.size() || t; ++i) {
        if (i < A.size()) {
            t += A[i] * b;
        }
        res.emplace_back(t % 10);
        t /= 10;
    }

    return res;
}

int main() {
    int a, b;
    cin >> a >> b;
    // 筛 1~a 中的质数
    get_primes(a);

    // C(a, b) = a! / b!(a - b)!)，分解表达式的质因数，计算分子的每个质因数的次数 - 分母的相同的质因数的次数，结果相乘即为答案
    // 计算表达式中所有质数的次数
    for (int i = 0; i < cnt; ++i) {
        int p = primes[i];
        // a 中 p 的次数 - b 中 p 的次数 - (a - b)中 p 的次数，为最终 p 的次数
        sum[i] = get(a, p) - get(b, p) - get(a - b, p);
    }

    // 高精度乘法计算所有质因子的乘积
    vector<int> A;
    A.emplace_back(1);
    for (int i = 0; i < cnt; ++i) {
        for (int j = 0; j < sum[i]; ++j) {
            A = mul(A, primes[i]);
        }
    }

    for (int i = (int) A.size() - 1; i >= 0; --i) {
        cout << A[i];
    }
    cout << endl;

    return 0;
}